package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import POJO.Autor;

public class AutorDAOImplementation implements AutorDAO {
	Connection c;
	
	public AutorDAOImplementation(){
		GenericDao gDao = new GenericDao();
		c = gDao.getConnection();
	}
	
	public void CadastrarAutor(Autor a) throws SQLException
	{
		String sql = "INSERT INTO Autor (nomeAutor, sobrenomeAutor) VALUES (?,?)";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setString(1, a.getNome());
		ps.setString(2, a.getSobrenome());
		ps.execute();
		ps.close();
	}
	
	public void AlterarAutor(Autor a) throws SQLException
	{
		String sql = "UPDATE Autor SET nomeAutor = ?, sobrenomeAutor = ? WHERE codAutor = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setString(1, a.getNome());
		ps.setString(2, a.getSobrenome());
		ps.setInt(3, a.getCodigoAutor());
		ps.execute();
		ps.close();
	}
	
	public void RemoveAutor(Autor a) throws SQLException
	{
		String sql = "DELETE Autor WHERE codAutor = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, a.getCodigoAutor());
		ps.execute();
		ps.close();
	}
	
	public int ProximoCodigo() throws SQLException
	{
		int codigo = 1;
		String sql = "SELECT MAX(codAutor + 1) AS codAutor FROM Autor";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			codigo = rs.getInt("codAutor");
		}
		rs.close();
		ps.close();
		return codigo;
	}
	
	public Autor consultaAutor(Autor a) throws SQLException
	{
		
		String sql = "SELECT codAutor, nomeAutor, sobrenomeAutor FROM Autor WHERE codAutor = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, a.getCodigoAutor());
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			a.setCodigoAutor(rs.getInt("codAutor"));
			a.setNome(rs.getString("nomeAutor"));
			a.setSobrenome(rs.getString("sobrenomeAutor"));
		}
		rs.close();
		ps.close();
		return a;
	}
	
	public List<Autor> listaAutor() throws SQLException
	{
		List<Autor> listaAutor = new ArrayList<Autor>();
		String sql = "SELECT * FROM Autor ORDER BY nomeAutor";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next())
		{
			Autor a = new Autor();
			a.setCodigoAutor(rs.getInt("codAutor"));
			a.setNome(rs.getString("nomeAutor"));
			a.setSobrenome(rs.getString("sobrenomeAutor"));
			listaAutor.add(a);
		}
		rs.close();
		ps.close();
		return listaAutor;
	}
}
